package com.sinothk.gpserver.modules.biz.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinothk.gpserver.modules.biz.entity.UserScore;
import com.sinothk.gpserver.modules.biz.mapper.UserScoreMapper;
import com.sinothk.gpserver.modules.biz.service.IUserScoreService;
import com.sinothk.server.support.annotation.callback.BizException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 编写 Liang Y.T.
 * 时间 2021/6/26 16:25
 */
@Service
public class UserScoreServiceImpl extends ServiceImpl<UserScoreMapper, UserScore> implements IUserScoreService {

    @Override
    public UserScore changeScore(String eventType, String account, int score) {
        if (StringUtils.isBlank(eventType)) throw new BizException("操作类型不能为空");
        if (StringUtils.isBlank(account)) throw new BizException("操作账号不能为空");
        if (score == 0) throw new BizException("积分差值不能为0");

        // 查看当前积分信息
        QueryWrapper<UserScore> wrapper = new QueryWrapper<>();
        wrapper.lambda().eq(UserScore::getAccount, account);
        List<UserScore> userScoreList = this.list(wrapper);
        if (userScoreList == null || userScoreList.size() != 1)
            throw new BizException("用户积分信息异常");

        UserScore userScore = userScoreList.get(0);

        synchronized(UserScoreServiceImpl.class){
            if ("increase".equals(eventType)) {
                // 增加
                long currScore = userScore.getScore() + score;
                userScore.setScore(currScore);
            } else if ("reduce".equals(eventType)) {
                // 减少
                if (score > userScore.getScore()) throw new BizException("当前积分不足");
                long currScore = userScore.getScore() - score;
                userScore.setScore(currScore);
            }

            this.updateById(userScore);
        }

        // 返回当前积分
        return this.getById(userScore.getId());
    }

    //    @Resource
//    private SysLoginMapper sysLoginMapper;
//
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public SysUser register(SysUserVo sysUser) throws Exception {
//        if (StringUtils.isBlank(sysUser.getPhoneNum())) throw new Exception("手机号码不能为空");
//
//        QueryWrapper<SysLogin> wrapper = new QueryWrapper<>();
//        wrapper.lambda().eq(SysLogin::getPhoneNum, sysUser.getPhoneNum());
//        List<SysLogin> users = sysLoginMapper.selectList(wrapper);
//        if (users.size() > 0) throw new Exception("手机号码已存在");
//
//        sysUser.setScore(0);
//        this.save(sysUser);
//        // 添加登录账号
//        SysLogin sysLogin = new SysLogin(sysUser.getId(), sysUser.getAccount(), sysUser.getPhoneNum(), sysUser.getPassword());
//        sysLogin.setLoginTime(new Date());
//        sysLoginMapper.insert(sysLogin);
//
//        return sysUser;
//    }
//
//    @Override
//    public LoginDto login(LoginVo loginVo) throws Exception {
//        if (StringUtils.isBlank(loginVo.getPhoneNum())) throw new Exception("手机号码不能为空");
//        if (StringUtils.isBlank(loginVo.getPassword())) throw new Exception("密码不能为空");
//        // 查询
//        QueryWrapper<SysLogin> wrapper = new QueryWrapper<>();
//        wrapper.lambda().eq(SysLogin::getPhoneNum, loginVo.getPhoneNum());
//        List<SysLogin> users = sysLoginMapper.selectList(wrapper);
//        if (users == null || users.size() == 0) throw new Exception("此手机号码未注册");
//        if (users.size() > 1) throw new Exception("此手机号码存在多个账号");
//
//        //比较
//        SysLogin sysLogin = users.get(0);
//        if (!loginVo.getPassword().equals(sysLogin.getPassword())) throw new Exception("密码不正确");
//
//        SysUser sysUser = this.getById(sysLogin.getUserId());
//        LoginDto loginDto = new LoginDto();
//        loginDto.setUser(sysUser);
//
//        // 更新登录时间
//        sysLogin.setLoginTime(new Date());
//        sysLoginMapper.updateById(sysLogin);
//
//        return loginDto;
//    }
//
//    @Override
//    public LoginDto loginByAccount(String account, String password) throws Exception {
//        if (StringUtils.isBlank(account)) throw new Exception("账号不能为空");
//        if (StringUtils.isBlank(password)) throw new Exception("密码不能为空");
//        // 查询
//        QueryWrapper<SysLogin> wrapper = new QueryWrapper<>();
//        wrapper.lambda().eq(SysLogin::getAccount, account);
//        List<SysLogin> users = sysLoginMapper.selectList(wrapper);
//        if (users == null || users.size() == 0) throw new Exception("此手机号码未注册");
//        if (users.size() > 1) throw new Exception("此手机号码存在多个账号");
//
//        //比较
//        SysLogin sysLogin = users.get(0);
//        if (!password.equals(sysLogin.getPassword())) throw new Exception("密码不正确");
//
//        SysUser sysUser = this.getById(sysLogin.getUserId());
//        LoginDto loginDto = new LoginDto();
//        loginDto.setUser(sysUser);
//
//        // 更新登录时间
//        sysLogin.setLoginTime(new Date());
//        sysLoginMapper.updateById(sysLogin);
//        return loginDto;
//    }


}
